/*
 *
 *    Copyright (c) 2022 Project CHIP Authors
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

// THIS FILE IS GENERATED BY ZAP
// This file is generated from clusters-Enums.h.zapt

#pragma once

#include <clusters/shared/Enums.h>
#include <cstdint>

namespace chip {
namespace app {
namespace Clusters {
namespace Thermostat {

// Enum for ACCapacityFormatEnum
enum class ACCapacityFormatEnum : uint8_t
{
    kBTUh = 0x00,
    // All received enum values that are not listed above will be mapped
    // to kUnknownEnumValue. This is a helper enum value that should only
    // be used by code to process how it handles receiving and unknown
    // enum value. This specific should never be transmitted.
    kUnknownEnumValue = 1,
};

// Enum for ACCompressorTypeEnum
enum class ACCompressorTypeEnum : uint8_t
{
    kUnknown = 0x00,
    kT1      = 0x01,
    kT2      = 0x02,
    kT3      = 0x03,
    // All received enum values that are not listed above will be mapped
    // to kUnknownEnumValue. This is a helper enum value that should only
    // be used by code to process how it handles receiving and unknown
    // enum value. This specific should never be transmitted.
    kUnknownEnumValue = 4,
};

// Enum for ACLouverPositionEnum
enum class ACLouverPositionEnum : uint8_t
{
    kClosed        = 0x01,
    kOpen          = 0x02,
    kQuarter       = 0x03,
    kHalf          = 0x04,
    kThreeQuarters = 0x05,
    // All received enum values that are not listed above will be mapped
    // to kUnknownEnumValue. This is a helper enum value that should only
    // be used by code to process how it handles receiving and unknown
    // enum value. This specific should never be transmitted.
    kUnknownEnumValue = 0,
};

// Enum for ACRefrigerantTypeEnum
enum class ACRefrigerantTypeEnum : uint8_t
{
    kUnknown = 0x00,
    kR22     = 0x01,
    kR410a   = 0x02,
    kR407c   = 0x03,
    // All received enum values that are not listed above will be mapped
    // to kUnknownEnumValue. This is a helper enum value that should only
    // be used by code to process how it handles receiving and unknown
    // enum value. This specific should never be transmitted.
    kUnknownEnumValue = 4,
};

// Enum for ACTypeEnum
enum class ACTypeEnum : uint8_t
{
    kUnknown          = 0x00,
    kCoolingFixed     = 0x01,
    kHeatPumpFixed    = 0x02,
    kCoolingInverter  = 0x03,
    kHeatPumpInverter = 0x04,
    // All received enum values that are not listed above will be mapped
    // to kUnknownEnumValue. This is a helper enum value that should only
    // be used by code to process how it handles receiving and unknown
    // enum value. This specific should never be transmitted.
    kUnknownEnumValue = 5,
};

// Enum for ControlSequenceOfOperationEnum
enum class ControlSequenceOfOperationEnum : uint8_t
{
    kCoolingOnly                 = 0x00,
    kCoolingWithReheat           = 0x01,
    kHeatingOnly                 = 0x02,
    kHeatingWithReheat           = 0x03,
    kCoolingAndHeating           = 0x04,
    kCoolingAndHeatingWithReheat = 0x05,
    // All received enum values that are not listed above will be mapped
    // to kUnknownEnumValue. This is a helper enum value that should only
    // be used by code to process how it handles receiving and unknown
    // enum value. This specific should never be transmitted.
    kUnknownEnumValue = 6,
};

// Enum for PresetScenarioEnum
enum class PresetScenarioEnum : uint8_t
{
    kOccupied     = 0x01,
    kUnoccupied   = 0x02,
    kSleep        = 0x03,
    kWake         = 0x04,
    kVacation     = 0x05,
    kGoingToSleep = 0x06,
    kUserDefined  = 0xFE,
    // All received enum values that are not listed above will be mapped
    // to kUnknownEnumValue. This is a helper enum value that should only
    // be used by code to process how it handles receiving and unknown
    // enum value. This specific should never be transmitted.
    kUnknownEnumValue = 0,
};

// Enum for SetpointChangeSourceEnum
enum class SetpointChangeSourceEnum : uint8_t
{
    kManual   = 0x00,
    kSchedule = 0x01,
    kExternal = 0x02,
    // All received enum values that are not listed above will be mapped
    // to kUnknownEnumValue. This is a helper enum value that should only
    // be used by code to process how it handles receiving and unknown
    // enum value. This specific should never be transmitted.
    kUnknownEnumValue = 3,
};

// Enum for SetpointRaiseLowerModeEnum
enum class SetpointRaiseLowerModeEnum : uint8_t
{
    kHeat = 0x00,
    kCool = 0x01,
    kBoth = 0x02,
    // All received enum values that are not listed above will be mapped
    // to kUnknownEnumValue. This is a helper enum value that should only
    // be used by code to process how it handles receiving and unknown
    // enum value. This specific should never be transmitted.
    kUnknownEnumValue = 3,
};

// Enum for StartOfWeekEnum
enum class StartOfWeekEnum : uint8_t
{
    kSunday    = 0x00,
    kMonday    = 0x01,
    kTuesday   = 0x02,
    kWednesday = 0x03,
    kThursday  = 0x04,
    kFriday    = 0x05,
    kSaturday  = 0x06,
    // All received enum values that are not listed above will be mapped
    // to kUnknownEnumValue. This is a helper enum value that should only
    // be used by code to process how it handles receiving and unknown
    // enum value. This specific should never be transmitted.
    kUnknownEnumValue = 7,
};

// Enum for SystemModeEnum
enum class SystemModeEnum : uint8_t
{
    kOff           = 0x00,
    kAuto          = 0x01,
    kCool          = 0x03,
    kHeat          = 0x04,
    kEmergencyHeat = 0x05,
    kPrecooling    = 0x06,
    kFanOnly       = 0x07,
    kDry           = 0x08,
    kSleep         = 0x09,
    // All received enum values that are not listed above will be mapped
    // to kUnknownEnumValue. This is a helper enum value that should only
    // be used by code to process how it handles receiving and unknown
    // enum value. This specific should never be transmitted.
    kUnknownEnumValue = 2,
};

// Enum for TemperatureSetpointHoldEnum
enum class TemperatureSetpointHoldEnum : uint8_t
{
    kSetpointHoldOff = 0x00,
    kSetpointHoldOn  = 0x01,
    // All received enum values that are not listed above will be mapped
    // to kUnknownEnumValue. This is a helper enum value that should only
    // be used by code to process how it handles receiving and unknown
    // enum value. This specific should never be transmitted.
    kUnknownEnumValue = 2,
};

// Enum for ThermostatRunningModeEnum
enum class ThermostatRunningModeEnum : uint8_t
{
    kOff  = 0x00,
    kCool = 0x03,
    kHeat = 0x04,
    // All received enum values that are not listed above will be mapped
    // to kUnknownEnumValue. This is a helper enum value that should only
    // be used by code to process how it handles receiving and unknown
    // enum value. This specific should never be transmitted.
    kUnknownEnumValue = 1,
};

// Bitmap for ACErrorCodeBitmap
enum class ACErrorCodeBitmap : uint32_t
{
    kCompressorFail    = 0x1,
    kRoomSensorFail    = 0x2,
    kOutdoorSensorFail = 0x4,
    kCoilSensorFail    = 0x8,
    kFanFail           = 0x10,
};

// Bitmap for Feature
enum class Feature : uint32_t
{
    kHeating                     = 0x1,
    kCooling                     = 0x2,
    kOccupancy                   = 0x4,
    kScheduleConfiguration       = 0x8,
    kSetback                     = 0x10,
    kAutoMode                    = 0x20,
    kLocalTemperatureNotExposed  = 0x40,
    kMatterScheduleConfiguration = 0x80,
    kPresets                     = 0x100,
    kEvents                      = 0x200,
    kThermostatSuggestions       = 0x400,
};

// Bitmap for HVACSystemTypeBitmap
enum class HVACSystemTypeBitmap : uint8_t
{
    kCoolingStage      = 0x3,
    kHeatingStage      = 0xC,
    kHeatingIsHeatPump = 0x10,
    kHeatingUsesFuel   = 0x20,
};

// Bitmap for OccupancyBitmap
enum class OccupancyBitmap : uint8_t
{
    kOccupied = 0x1,
};

// Bitmap for PresetTypeFeaturesBitmap
enum class PresetTypeFeaturesBitmap : uint16_t
{
    kAutomatic     = 0x1,
    kSupportsNames = 0x2,
};

// Bitmap for ProgrammingOperationModeBitmap
enum class ProgrammingOperationModeBitmap : uint8_t
{
    kScheduleActive = 0x1,
    kAutoRecovery   = 0x2,
    kEconomy        = 0x4,
};

// Bitmap for RelayStateBitmap
enum class RelayStateBitmap : uint16_t
{
    kHeat       = 0x1,
    kCool       = 0x2,
    kFan        = 0x4,
    kHeatStage2 = 0x8,
    kCoolStage2 = 0x10,
    kFanStage2  = 0x20,
    kFanStage3  = 0x40,
};

// Bitmap for RemoteSensingBitmap
enum class RemoteSensingBitmap : uint8_t
{
    kLocalTemperature   = 0x1,
    kOutdoorTemperature = 0x2,
    kOccupancy          = 0x4,
};

// Bitmap for ScheduleDayOfWeekBitmap
enum class ScheduleDayOfWeekBitmap : uint8_t
{
    kSunday    = 0x1,
    kMonday    = 0x2,
    kTuesday   = 0x4,
    kWednesday = 0x8,
    kThursday  = 0x10,
    kFriday    = 0x20,
    kSaturday  = 0x40,
    kAway      = 0x80,
};

// Bitmap for ScheduleModeBitmap
enum class ScheduleModeBitmap : uint8_t
{
    kHeatSetpointPresent = 0x1,
    kCoolSetpointPresent = 0x2,
};

// Bitmap for ScheduleTypeFeaturesBitmap
enum class ScheduleTypeFeaturesBitmap : uint16_t
{
    kSupportsPresets   = 0x1,
    kSupportsSetpoints = 0x2,
    kSupportsNames     = 0x4,
    kSupportsOff       = 0x8,
};

// Bitmap for ThermostatSuggestionNotFollowingReasonBitmap
enum class ThermostatSuggestionNotFollowingReasonBitmap : uint16_t
{
    kDemandResponseEvent    = 0x1,
    kOngoingHold            = 0x2,
    kSchedule               = 0x4,
    kOccupancy              = 0x8,
    kVacationMode           = 0x10,
    kTimeOfUseCostSavings   = 0x20,
    kPreCoolingOrPreHeating = 0x40,
    kConflictingSuggestions = 0x80,
};
} // namespace Thermostat
} // namespace Clusters
} // namespace app
} // namespace chip
